// IMPORT


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*IMPORT][IMPORT:1]]
import * as Damage from "./damage.module.js"
import * as AttackDamage from "./attackDamage.module.js"
import * as SkillRuneDamage from "./skillRuneDamage.module.js"
import * as MeatQualityCoefficient from "./meatQualityCoefficient.module.js"
import * as LimbAttackDamage from "./limbAttackDamage.module.js"
import * as NonSpiritualElementDamageBonus from "./nonSpiritualElementDamageBonus.module.js"
import * as ElementalStarDamageFactor from "./elementalStarDamageFactor.module.js"
import * as Resistance from "./resistance.module.js"
import * as Penetration from "./penetration.module.js"
import * as CritDamageRate from "./critDamageRate.module.js"
import * as CritRate from "./critRate.module.js"
import * as ElementalAttackPower from "./elementalAttackPower.module.js"
import * as AttackPower from "./attackPower.module.js"
import * as Comparison from "./comparison.module.js"
// IMPORT:1 ends here
// COPY


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*COPY][COPY:1]]
// js中对象的复制，浅复制（浅拷贝）和深复制（深拷贝） - 简书: https://www.jianshu.com/p/0d7bd31ccf43
function copy(m,n){
    n=n||{}
    for(let name in m){
        if(typeof m[name]==="object"){
            n[name]=(m[name].constructor===Array)?[]:{}
            copy(m[name],n[name])
        }else{
            n[name]=m[name]
        }
    }
    return n
}

function copyOptions(){
    return copy(options)
}
// COPY:1 ends here
// SETF


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*SETF][SETF:1]]
function setf(value){
    if(value){
        options=value
    }
    return options
}
// SETF:1 ends here
// DAMAGE


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*DAMAGE][DAMAGE:1]]
function damage(object,type){
    let 暴击率=object.暴击率
    let 暴击伤害倍率=object.暴击伤害倍率

    let 弱点攻击伤害加成=object.弱点攻击伤害加成
    let 非弱点攻击伤害加成=object.非弱点攻击伤害加成

    let 肢体攻击伤害=object.肢体攻击伤害
    let 易伤系数=object.易伤系数
    let 传递系数=object.传递系数
    let 肉质系数=object.肉质系数
    let 技能符文伤害=object.技能符文伤害
    let 攻击力=object.攻击力
    let 无视护甲后巨兽受到的伤害=object.无视护甲后巨兽受到的伤害
    let 元素攻击力=object.元素攻击力
    let 非魂技元素伤害加成=object.非魂技元素伤害加成
    let 魂技元素伤害加成=object.魂技元素伤害加成
    let 无视抗性后巨兽受到的伤害=object.无视抗性后巨兽受到的伤害
    let 星级系数加成=object.星级系数加成

    let objects={
        暴击率:CritRate.calculate(暴击率),
        暴击伤害倍率:CritDamageRate.calculate(暴击伤害倍率),
        攻击伤害加成:AttackDamage.calculate(type,弱点攻击伤害加成,非弱点攻击伤害加成),
        肢体攻击伤害:LimbAttackDamage.calculate(肢体攻击伤害),
        易伤系数:易伤系数,
        传递系数:传递系数,
        肉质系数:MeatQualityCoefficient.calculate(肉质系数),
        技能符文伤害:SkillRuneDamage.calculate(技能符文伤害),

        攻击力:AttackPower.calculate(攻击力),
        无视护甲后巨兽受到的伤害:Penetration.calculate(无视护甲后巨兽受到的伤害),

        元素攻击力:ElementalAttackPower.calculate(元素攻击力),
        非魂技元素伤害加成:NonSpiritualElementDamageBonus.calculate(非魂技元素伤害加成),
        魂技元素伤害加成:魂技元素伤害加成,
        无视抗性后巨兽受到的伤害:Resistance.calculate(无视抗性后巨兽受到的伤害),
        星级系数加成:ElementalStarDamageFactor.calculate(星级系数加成)}

    return {
        avg:Damage.avg(objects),
        max:Damage.max(objects)
    }
}
// DAMAGE:1 ends here
// REPORT


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*REPORT][REPORT:1]]
function report(objects){

    objects.forEach(function(object){
        object.平均弱点伤害=Math.round(damage(object.方案,"weakness").avg)
        object.弱点伤害跳字=Math.round(damage(object.方案,"weakness").max)
        object.平均非弱点伤害=Math.round(damage(object.方案,"nonweakness").avg)
        object.非弱点伤害跳字=Math.round(damage(object.方案,"nonweakness").max)

    })

    Comparison.calculate(objects)

    console.log(objects)

    return objects
}
// REPORT:1 ends here
// FILTER

// 从已经计算好的内容过滤出部分属性


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*FILTER][FILTER:1]]
function filter(object){
    let 平均弱点伤害=object.平均弱点伤害
    let 弱点伤害跳字=object.弱点伤害跳字
    let 平均非弱点伤害=object.平均非弱点伤害
    let 非弱点伤害跳字=object.非弱点伤害跳字
    let 对比方案=object.对比方案
    let 平均弱点伤害提升了=object.平均弱点伤害提升了
    let 弱点伤害跳字提升了=object.弱点伤害跳字提升了
    let 平均非弱点伤害提升了=object.平均非弱点伤害提升了
    let 非弱点伤害跳字提升了=object.非弱点伤害跳字提升了

    return {
        对比方案:对比方案,
        平均弱点伤害:平均弱点伤害,
        平均弱点伤害提升了:平均弱点伤害提升了,
        弱点伤害跳字:弱点伤害跳字,
        弱点伤害跳字提升了:弱点伤害跳字提升了,
        平均非弱点伤害:平均非弱点伤害,
        平均非弱点伤害提升了:平均非弱点伤害提升了,
        非弱点伤害跳字:非弱点伤害跳字,
        非弱点伤害跳字提升了:非弱点伤害跳字提升了
    }
}
// FILTER:1 ends here
// OPTION


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*OPTION][OPTION:1]]
function option(title,options){
    return {
        标题:title,
        方案:options
    }
}
// OPTION:1 ends here
// 攻击力


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E6%94%BB%E5%87%BB%E5%8A%9B][攻击力:1]]
/* 攻击力 */
let attackProperties={
    /* 武器攻击力 */
    武器基础攻击力:496,
    武器精铸攻击力:53,
    武器重铸攻击力:0,
    血灵石攻击力增幅:0,

    /* 其他攻击力 */
    项链攻击力:0,
    羁绊攻击力:25,
    好感度攻击力:25,
    基础攻击力:10,
    兽潮攻击力:0,
    专精攻击力:60,

    /* 百分比攻击增幅 */
    出战魂:0,
    强攻:0,
    兽潮百分比攻击增幅:0,
    料理:0,
    魂萃:0,
    技能:0
}
// 攻击力:1 ends here
// 元素攻击力


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E5%85%83%E7%B4%A0%E6%94%BB%E5%87%BB%E5%8A%9B][元素攻击力:1]]
/* 元素攻击力 */
let elementalAttackProperties={
    /* 武器元素攻击力 */
    武器基础元素攻击力:448,
    武器精铸元素攻击力:35,
    武器重铸元素攻击力:78,
    血灵石元素攻击力增幅:0.35,

    /* 其他元素攻击力 */
    项链元素攻击力:79,
    兽潮元素攻击力:0,

    /* 魂萃元素攻击力增幅 */
    魂萃元素攻击力增幅:0.132,
}
// 元素攻击力:1 ends here
// 暴击率


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E6%9A%B4%E5%87%BB%E7%8E%87][暴击率:1]]
/* 暴击率 */
let critRateProperties={
    /* 面板系 */
    武器基础暴击率:0.22,
    武器精铸暴击率:0.05,
    武器重铸暴击率:0.03,
    血灵石暴击率:0,
    精准:0.06,
    锐利:0,
    伙伴羁绊:0.025,
    项链:0.017,
    基础暴击率:0.05,
    料理:0,

    /* 非面板系 */
    荷尔蒙:0.06,
    断食:0,
    战意:0,
    诡诈:0,
    心得:0,
    伙伴出战:0,
    出战魂:0,
    技能符文:0,
    专精增幅:0
}
// 暴击率:1 ends here
// 暴击伤害倍率


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E6%9A%B4%E5%87%BB%E4%BC%A4%E5%AE%B3%E5%80%8D%E7%8E%87][暴击伤害倍率:1]]
/* 暴击伤害倍率 */
let critDamageRateProperties={
    /* 面板系 */
    武器基础爆伤:0,
    武器精铸爆伤:0,
    武器重铸爆伤:0.1,
    血灵石爆伤:0,
    重创:0.12,
    伙伴羁绊:0.025,
    项链:0,
    基础爆伤:0.35,
    满专精爆伤:0.48,
    通用魂萃爆伤:0,
    料理:0,
    兽潮爆伤:0,

    /* 非面板系 */
    破势:0.13,
    浴血:0.1,
    断食:0,
    战意:0,
    盾刺:0.12,
    平原猎术:0.06,
    雪山猎术:0,
    沙漠猎术:0,
    狂热:0,
    出战魂:0,
    伙伴出战:0,
    专精技能:0,
    符文技能:0
}
// 暴击伤害倍率:1 ends here
// 无视护甲后巨兽受到的伤害


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E6%97%A0%E8%A7%86%E6%8A%A4%E7%94%B2%E5%90%8E%E5%B7%A8%E5%85%BD%E5%8F%97%E5%88%B0%E7%9A%84%E4%BC%A4%E5%AE%B3][无视护甲后巨兽受到的伤害:1]]
/* 无视护甲后巨兽受到的伤害 */
let penetrationProperties={
    巨兽护甲星级:2,

    /* 本身护甲穿透 */
    穿透:0,
    进退:0,
    燃血:0,
    出战魂:0,
    魂萃:0,
    羁绊:0.03
}
// 无视护甲后巨兽受到的伤害:1 ends here
// 无视抗性后巨兽受到的伤害


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E6%97%A0%E8%A7%86%E6%8A%97%E6%80%A7%E5%90%8E%E5%B7%A8%E5%85%BD%E5%8F%97%E5%88%B0%E7%9A%84%E4%BC%A4%E5%AE%B3][无视抗性后巨兽受到的伤害:1]]
/* 无视抗性后巨兽受到的伤害 */
let resistanceProperties={
    巨兽抗性星级:1,

    实际无视抗性比例:0
}
// 无视抗性后巨兽受到的伤害:1 ends here
// 星级系数加成


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E6%98%9F%E7%BA%A7%E7%B3%BB%E6%95%B0%E5%8A%A0%E6%88%90][星级系数加成:1]]
/* 星级系数加成 */
let elementalStar=3
// 星级系数加成:1 ends here
// 非魂技元素伤害加成


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E9%9D%9E%E9%AD%82%E6%8A%80%E5%85%83%E7%B4%A0%E4%BC%A4%E5%AE%B3%E5%8A%A0%E6%88%90][非魂技元素伤害加成:1]]
/* 非魂技元素伤害加成 */
let nonSpiritualElementDamageProperties={
    元素专精:0.5,
    进退:0,
    燃血:0,
    兽潮:0,
    料理:0,
    羁绊:0.025
}
// 非魂技元素伤害加成:1 ends here
// 魂技元素伤害加成


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E9%AD%82%E6%8A%80%E5%85%83%E7%B4%A0%E4%BC%A4%E5%AE%B3%E5%8A%A0%E6%88%90][魂技元素伤害加成:1]]
/* 魂技元素伤害加成 */
let spiritualElementDamageBonus=0
// 魂技元素伤害加成:1 ends here
// 易伤系数


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E6%98%93%E4%BC%A4%E7%B3%BB%E6%95%B0][易伤系数:1]]
/* 易伤系数 */
let vulnerabilityCoefficient=0
// 易伤系数:1 ends here
// 传递系数


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E4%BC%A0%E9%80%92%E7%B3%BB%E6%95%B0][传递系数:1]]
/* 传递系数 */
let transferCoefficient=0
// 传递系数:1 ends here
// 肢体攻击伤害


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E8%82%A2%E4%BD%93%E6%94%BB%E5%87%BB%E4%BC%A4%E5%AE%B3][肢体攻击伤害:1]]
/* 肢体攻击伤害 */
let limbAttackDamageProperties={
    出战魂:0,
    巨化猎术:0,
    强弓劲弩:0
}
// 肢体攻击伤害:1 ends here
// 肉质系数


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E8%82%89%E8%B4%A8%E7%B3%BB%E6%95%B0][肉质系数:1]]
/* 肉质系数 */
let meatQualityStar=3
// 肉质系数:1 ends here
// 技能符文伤害


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E6%8A%80%E8%83%BD%E7%AC%A6%E6%96%87%E4%BC%A4%E5%AE%B3][技能符文伤害:1]]
/* 技能符文伤害 */
let skillRuneDamageProperties={
    基础比例:15,
    血石增幅:0.17,
    威力系数:0.27,
    技能名称:"耀星"
}
// 技能符文伤害:1 ends here
// 非弱点攻击伤害加成


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E9%9D%9E%E5%BC%B1%E7%82%B9%E6%94%BB%E5%87%BB%E4%BC%A4%E5%AE%B3%E5%8A%A0%E6%88%90][非弱点攻击伤害加成:1]]
/* 非弱点攻击伤害加成 */
let nonWeaknessAttackDamageProperties={
    /* 攻击伤害 */
    出战魂攻击伤害加成:0,
    脉石:0,
    兽潮攻击伤害加成:0,
    专精:0.36,
    技能符文:0.2,
    特技增幅:0.18,

    /* 物种伤害加成 */
    对应物种猎术:0.15,
    羁绊出战物种伤害加成:0.05,
    出战魂物种伤害加成:0,
    兽潮物种伤害加成:0
}
// 非弱点攻击伤害加成:1 ends here
// 弱点攻击伤害加成


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E5%BC%B1%E7%82%B9%E6%94%BB%E5%87%BB%E4%BC%A4%E5%AE%B3%E5%8A%A0%E6%88%90][弱点攻击伤害加成:1]]
/* 弱点攻击伤害加成 */
let weaknessAttackDamageProperties={
    /* 弱点伤害 */
    出战魂弱点伤害加成:0,
    基础弱点伤害:0.5,
    狩猎术:0.1,
    特技弱点伤害增幅:0,
    技能符文弱点伤害增幅:0
}
// 弱点攻击伤害加成:1 ends here
// 汇总

// 用中文重命名上述各种属性，并集合在一起


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*%E6%B1%87%E6%80%BB][汇总:1]]
let options={
    暴击率:critRateProperties,
    暴击伤害倍率:critDamageRateProperties,

    弱点攻击伤害加成:weaknessAttackDamageProperties,
    非弱点攻击伤害加成:nonWeaknessAttackDamageProperties,

    肢体攻击伤害:limbAttackDamageProperties,
    易伤系数:vulnerabilityCoefficient,
    传递系数:transferCoefficient,
    肉质系数:meatQualityStar,
    技能符文伤害:skillRuneDamageProperties,

    攻击力:attackProperties,
    无视护甲后巨兽受到的伤害:penetrationProperties,

    元素攻击力:elementalAttackProperties,
    非魂技元素伤害加成:nonSpiritualElementDamageProperties,
    魂技元素伤害加成:spiritualElementDamageBonus,
    无视抗性后巨兽受到的伤害:resistanceProperties,
    星级系数加成:elementalStar
}
// 汇总:1 ends here
// EXPORT


// [[file:~/literate-programming/soul-hunter-awakening-damage-calculator-web-edition.org::*EXPORT][EXPORT:1]]
export{report,copyOptions,filter,option,setf}
// EXPORT:1 ends here
